#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
 
class Solution {
public:
    long prev = LONG_MIN;
    bool zhongxu(TreeNode* root)
    {
        if (root == nullptr) return true;

        bool left = zhongxu(root->left);

        int cur = false;
        if (prev < root->val)
        {
            prev = root->val;
            cur = true;
        }

        bool right = zhongxu(root->right);

        return left && cur && right;
    }
    bool isValidBST(TreeNode* root) {
        return zhongxu(root);
    }
};